<?php
namespace Modules\Activity\Http\Controllers\Client\Lottery;

use Illuminate\Http\Request;
use Illuminate\Routing\Controller;

use \Modules\Activity\Entities\Lottery\Activity;
// use \Modules\User\Entities\User;

use Validator;
use ThrowException;
use Auth;
use DB;

// 参与活动的用户（is_lucker_user）
class ActivityController extends Controller
{
    // 列表
    public function index(Request $req)
    {
        $options = $req->all();
        // $options['per_page'] = 200;
        $options['scopes'] = ['onStock'];
        $options['only'] = [
            'id',
            'uuid',
            'money_price',
            'score_price',
            'title',
            'thumb',
            'activity_type_text',
            'activity_type'
        ];

        $list = Activity::getList($options);

        return $list->generateListResponse();
    }

    // 详情
    public function show(Request $req, $uuid)
    {
        $item = Activity::getEntity([
            'uuid' => $uuid,
            'with' => ['skus']
        ]);

        $info = $item->getInfo([
            'id',
            'uuid',
            'current_session',
            'detail_images',
            'emit_ticket_total',
            'emit_time',
            'emit_type',
            'emit_user_total',
            'end_at',
            'images',
            'money_price',
            'prize_total',
            'score_price',
            'money_price',
            'session_total',
            'old_user_reward_ticket',
            'new_user_reward_ticket',
            'skus',
            'start_at',
            'sub_title',
            'thumb',
            'title',
            'union_status',
            'union_status_text',
            'is_need_join_code'
        ]);

        if ($item->rule) {
            $info['rule_list'] = explode("\n", $item->rule);
        }
        else {
            $info['rule_list'] = [
                '每个用户单个活动仅可参与1次，每次获取1个抽奖码。',
                '用户可通过分享给好友助力获取更多抽奖码，每分享1个好友增加1个或多个抽奖码。',
                '开奖结果以抽奖码为准，开奖后抽奖结果将公示在此活动页下方。',
                '参与码可在官方社群或公众号中获取参与码。',
                // '奖品会自动在用户的个人中心中生成订单，请注意查收'
            ];
        }

        $info['is_need_join_code'] = $item->isNeedJoinCode() ? 1: 0;

        // 当期记录
        $info['current_session_records_count'] = $item->records()->where('session', $item->current_session)->count();
        $info['current_session_lucky_records_count'] = $item->lucky_records()->where('session', $item->current_session)->count();
        $info['current_session_lottery_tickets_count'] = $item->tickets()->where('session', $item->current_session)->count();

        $info['is_join'] = $item->isUserJoin(Auth::user()) ? 1 : 0;
        $info['is_lucky_user'] = $item->isLuckyUser(Auth::user()) ? 1 : 0;

        $info['my_ticket_total'] = $item->calcTicketTotal(Auth::user());
        $info['my_invitee_total'] = $item->calcInviteeTotal(Auth::user());

        unset($info['rule']);
    
        // 阅读量+1
        $item->update([
            'visit_total' => $item->visit_total + 1
        ]);

        return [
            'info' => $info
        ];
    }

    // 用户列表
    // public function userIndex(Request $req, $uuid)
    // {
    //     $rule = [
    //         'type' => ['required']
    //     ];
    //     Validator::make($req->all(), $rule)->fails() && ThrowException::BadRequest(); 

    //     $options = $req->all();

    //     $activity = Activity::getChildrenEntity([
    //         'uuid' => $uuid
    //     ]);

    //     if ($req->type === 'lucky') {
    //         $builder =  $activity->lucky_records(); 
    //     }
    //     elseif ($req->type === 'all') {
    //         $builder =  $activity->records(); 
    //     }

    //     // 只获取当期用户
    //     $session = $req->input('session', 'all');
    //     if ($session === 'current') {
    //         $builder->where('session', $activity->current_session);
    //     }

    //     $list = ActivityRecord::getList([
    //         'builder' => $builder,
    //         'with' => ['user'],
    //         'with_count' => ['lottery_tickets'],
    //         'only' => [
    //             'id',
    //             'lottery_tickets_count',
    //             'session',
    //             'user' => [
    //                 'name',
    //                 'headimg',
    //             ]
    //         ]
    //     ]);

    //     return $list->generateListResponse();
    // }

    // public function luckyUserIndex(Request $req, $uuid)
    // {
    //     $rule = [
    //     ];
    //     Validator::make($req->all(), $rule)->fails() && ThrowException::BadRequest(); 

    //     $options = $req->all();

    //     $activity = Activity::getChildrenEntity([
    //         'uuid' => $uuid
    //     ]);

    //     $builder =  $activity->lucky_records(); 

    //     // 只获取当期用户
    //     $session = $req->input('session', 'all');
    //     if ($session === 'current') {
    //         $builder->where('session', $activity->current_session);
    //     }

    //     $list = ActivityRecord::getList([
    //         'builder' => $builder,
    //         'with' => ['user'],
    //         // 'with_count' => ['lottery_tickets', 'invitees'],
    //         'only' => [
    //             'id',
    //             'lottery_tickets_count',
    //             'invitees_count',
    //             'is_lucky_user',
    //             'created_at',
    //             'session',
    //             'lucky_ticket' => [
    //                 'sku',
    //                 'number',
    //                 'is_picked'
    //             ],
    //             'user' => [
    //                 'name',
    //                 'headimg',
    //                 'gender'
    //             ]
    //         ]
    //     ]);

    //     $list->each(function ($item) {
    //         $item->lucky_ticket = $item->lottery_tickets()->lucky()->with('sku')->first();
    //     });

    //     return $list->generateListResponse();
    // }

    // // 某个人某个活动的签号列表
    // public function myTicketIndex(Request $req, $uuid)
    // {
    //     $rule = [
    //     ];
    //     Validator::make($req->all(), $rule)->fails() && ThrowException::BadRequest(); 

    //     $options = $req->all();
    //     $user = Auth::requireLoginUser();

    //     $activity = Activity::getChildrenEntity([
    //         'uuid' => $uuid
    //     ]);

    //     $where = [
    //         'activity_id' => $activity->id,
    //         'user_id' => $user->id
    //     ];

    //     if ($req->input('is_lucky')) {
    //         $where['status'] = 1;
    //     }

    //     $list = LotteryTicket::getList([
    //         'where' => $where,
    //         'with' => ['invitee', 'sku.coupon', 'order', 'activity'],
    //         'only' => [
    //             'id',
    //             'uuid',
    //             'number',
    //             'created_at',
    //             'from_type',
    //             'session',
    //             'invitee' => [
    //                 'name',
    //                 'headimg'
    //             ],
    //             'is_picked',
    //             'sku' => [
    //                 'title',
    //                 'number',
    //                 'thumb',
    //                 'type',
    //                 'score',
    //                 'redpack',
    //                 'coupon' => [
    //                     'id',
    //                     'uuid',
    //                     'title'
    //                 ]
    //             ],
    //             'order' => [
    //                 'id',
    //                 'uuid'
    //             ],
    //             'activity' => [
    //                 'title'
    //             ],
    //             'status'
    //         ]
    //     ]);

    //     return $list->generateListResponse();
    // }

    // // 某个人某个活动的助力记录
    // public function myInviteeIndex(Request $req, $uuid)
    // {
    //     $rule = [
    //     ];
    //     Validator::make($req->all(), $rule)->fails() && ThrowException::BadRequest(); 

    //     $options = $req->all();
    //     $user = Auth::requireLoginUser();

    //     $activity = Activity::getChildrenEntity([
    //         'uuid' => $uuid
    //     ]);

    //     $list = ActivityInviteeRecord::getList([
    //         'where' => [
    //             'activity_id' => $activity->id,
    //             'user_id' => $user->id
    //         ],
    //         'with' => ['invitee'],
    //         'only' => [
    //             'created_at',
    //             'reward_total',
    //             'invitee' => [
    //                 'name',
    //                 'headimg'
    //             ]
    //         ]
    //     ]);

    //     return $list->generateListResponse();
    // }

    // // 某个用户的邀请信息
    // public function inviteInfo(Request $req, $uuid)
    // {
    //     $rule = [
    //         'inviter' => ['required']
    //     ];
    //     Validator::make($req->all(), $rule)->fails() && ThrowException::BadRequest(); 

    //     $activity = Activity::getChildrenEntity([
    //         'uuid' => $uuid
    //     ]);

    //     $inviter = User::getEntity([
    //         'uuid' => $req->inviter
    //     ]);

    //     $record = $activity->records()->where('user_id', $inviter->id)->first();

    //     // 是否已助力过
    //     $isAccept = $activity->isAcceptedInvite($inviter, Auth::user()) ? 1 : 0;

    //     $userTicketTotal = $activity->lottery_tickets()->where('user_id', $inviter->id)->count();
    //     $allTicketTotal = $activity->lottery_tickets()->count();

    //     $res = [
    //         'activity' => [
    //             'id' => $activity->id,
    //             'uuid' => $activity->uuid,
    //         ],
    //         'record_id' => @$record->id,
    //         'user' => [
    //             'uuid' => $inviter->uuid,
    //             'name' => $inviter->name,
    //             'headimg' => $inviter->headimg
    //         ],
    //         'is_accepted' => $isAccept,
    //         'user_ticket_total' => $userTicketTotal,
    //         'all_ticket_total' => $allTicketTotal
    //     ];

    //     return $res;
    // }

    // // 帮好友助力
    // public function acceptInvite(Request $req, $uuid)
    // {

    //     $rule = [
    //         'inviter' => ['required']
    //     ];
    //     Validator::make($req->all(), $rule)->fails() && ThrowException::BadRequest(); 

    //     $user = Auth::requireLoginUser();

    //     $activity = Activity::getChildrenEntity([
    //         'uuid' => $uuid
    //     ]);

    //     if ($activity->union_status === 'expired') {
    //         ThrowException::Conflict('活动已结束了哦~');
    //     }

    //     $inviter = User::getEntity([
    //         'uuid' => $req->inviter
    //     ]);

    //     $activity->invitees()->where('invitee_id', $user->id)->first() && ThrowException::Conflict('你已在此活动助力过了哦~');

    //     // 增加助力记录
    //     DB::beginTransaction();

    //     $activity->addInvite($inviter, $user);

    //     DB::commit();

    //     return [];
    // }

    // // 领取奖品
    // public function pickPrize(Request $req, $uuid)
    // {
    //     $user = Auth::requireLoginUser();

    //     $ticket = LotteryTicket::getEntity([
    //         'uuid' => $uuid,
    //         'user_id' => $user->id
    //     ]);

    //     if ($ticket->status != 1) {
    //         ThrowException::Conflict('此签号未中奖，无法领取~');
    //     }

    //     if ($ticket->is_picked) {
    //         ThrowException::Conflict('此签号奖品已领取过~');
    //     }

    //     if (!$ticket->sku || $ticket->sku->type != 'custom') {
    //         ThrowException::Conflict('非实物奖品无法领取~');
    //     }

    //     if (!$req->input('address_id')) {
    //         ThrowException::Conflict('请选择收货地址~');
    //     }

    //     DB::beginTransaction();
    //     // 实物发放,创建订单
    //     $skuableMaps = [
    //         [
    //             'skuable' => $ticket->sku,
    //             'total' => 1
    //         ]
    //     ];
    //     $address = $user->addresses()->where('id', $req->input('address_id'))->first() ?: ThrowException::Conflict('地址不正确~'); // 暂无地址
    //     $order = ActivityOrder::initWith($skuableMaps, $user, $address, [
    //         'activity' => $ticket->activity
    //     ]);
    //     $order->createAll();

    //     $ticket->update([
    //         'is_picked' => 1,
    //         'order_id' => $order->id 
    //     ]);
    //     DB::commit();

    //     return [
    //         'order' => [
    //             'id' => $order->id,
    //             'uuid' => $order->uuid
    //         ]
    //     ];
    // }
}
